// 封装一个axios实例，对外导出
import axios from "axios";
import EventBus from "../util/EventBus";

const request = axios.create({
  baseURL: "/api",
  timeout: 5000,
});
//  请求拦截器
request.interceptors.request.use(
  function (config) {
    let token = localStorage.getItem("x-auth-token");
    if (token) {
      config.headers = {
        "x-auth-token": token,
      };
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);
//   响应拦截器里面可以得到响应回来的数据
//   有两个回调函数,一个回调函数是当响应状态码是200进去的
//   第二个回调函数,是响应状态码是非200进去的
request.interceptors.response.use(
  (res) => {
    return res.data;
  },
  (err) => {
    // 现在的接口服务器,每当我们的请求又问题了,都是响应回来非200
    // 把所有的不成功的请求,都是这进行处理
    // console.log(err);
    // alert(err.response.data.message)
    // 如果是登录已失效
    // 目前这个项目使用errCode 是1002代表登录失效
    if (err.response.data.errCode === 1002) {
      // 使用订阅发布实现登录失效
      EventBus.emit("login_timeout");
    } else {
      EventBus.emit("error", err.response.data.message);
    }
    Promise.reject(err);
  }
);

export default request;
